import plotly.graph_objects as go
import numpy as np
import matplotlib.pyplot as plt
import tqdm
def eiktau(ks, tau, minus=False):
exponetial = np.exp(np.complex(0, 1)*np.dot(ks, tau))
mod_tau = np.linalg.norm(tau)
if minus:
mod_tau = -mod_tau
return exponetial*mod_tau
def sqrt3by2():
return np.sqrt(3)/2
def sum_for_ks(ks, points, minus = False):
sum = 0
for point in points:
sum += eiktau(ks, point, minus=minus)
return np.abs(sum)
eiktau([1,1,1], [2,2,2], minus=True)
(-3.3261274407928134+0.9679236786054194j)
a=1
b=1
points = [[0,a,0], [a*sqrt3by2(), -a/2, 0], [-a*sqrt3by2(), -a/2, 0],
[0,0,b], [a*sqrt3by2(), a/2, b], [0, -a, b], [-a*sqrt3by2(), a/2, b]]
sum_for_ks([1,1,1], points, minus=False)
4.743291269190796
def plot_band_structure(points, eatomic = 1, gamma = 1):
kxs = np.linspace(-4, 4, 100)
kys = np.linspace(-4, 4, 100)
kzs = np.linspace(-4, 4, 100)
Esp = np.zeros((100, 100, 100))
Esn = np.zeros((100, 100, 100))
# print("Calculating for negative value of gamma.")
for i in tqdm.tqdm(range(len(kxs)), desc='Calculating...'):
for l in range(len(kys)):
for k in range(len(kzs)):
Esp[i, l, k] = sum_for_ks([kxs[i], kys[l], kzs[k]], points, minus=False)
# print("Done!")
# print("Calculating for positive value of gamma.")
# for i in tqdm.tqdm(range(len(kxs)), desc='Calculating...'):
# for l in range(len(kys)):
# for k in range(len(kzs)):
# Esn[i, l, k] = sum_for_ks([kxs[i], kys[l], kzs[k]], points, minus=True)
x, y = np.meshgrid(kxs, kys)
# E1 = eatomic + gamma*Esp[:, :, 0]
# E1 = eatomic + gamma*Esp[:, :, 0]
fig = go.Figure(data = [go.Surface(x=x, y=y, z=Esp[:, :, 0]),
go.Surface(x=x, y=y, z=-Esp[:, :, 0]),
# go.Surface(x=x, y=y, z=Esn[:, :, 0]),
# go.Surface(x=x, y=y, z=-Esn[:, :, 0])
])
fig.update_layout(title='Band Structure',
scene = dict(
xaxis_title='kx',
yaxis_title='ky',
zaxis_title='E'
))
fig.show()
return Esp
a=1
b=1
points = [[0,a,0], [a*sqrt3by2(), -a/2, 0], [-a*sqrt3by2(), -a/2, 0],
[0,0,b], [a*sqrt3by2(), a/2, b], [0, -a, b], [-a*sqrt3by2(), a/2, b]]
Esp = plot_band_structure(points)
Calculating...: 100%|████████████████████████████████████████████████████████████████| 100/100 [02:31<00:00, 1.52s/it]
a=1
b=1
points = [[0,a,0], [a*sqrt3by2(), -a/2, 0], [-a*sqrt3by2(), -a/2, 0],
[0,0,b], [a*sqrt3by2(), -a/2, b], [0, a, b], [-a*sqrt3by2(), -a/2, b]]
E = plot_band_structure(points)
Calculating...: 100%|████████████████████████████████████████████████████████████████| 100/100 [02:30<00:00, 1.50s/it]
a=1
b=1
points = [[0,a,0], [a*sqrt3by2(), -a/2, 0], [-a*sqrt3by2(), -a/2, 0],
[0,0,b],
# [a*sqrt3by2(), -a/2, b], [0, a, b], [-a*sqrt3by2(), -a/2, b]
]
E = plot_band_structure(points)
Calculating...: 100%|████████████████████████████████████████████████████████████████| 100/100 [01:57<00:00, 1.17s/it]
a=1
b=1
points = [[0,a,0], [a*sqrt3by2(), -a/2, 0], [-a*sqrt3by2(), -a/2, 0],
# [0,0,b], [a*sqrt3by2(), -a/2, b], [0, a, b], [-a*sqrt3by2(), -a/2, b]
]
E = plot_band_structure(points)
Calculating...: 100%|████████████████████████████████████████████████████████████████| 100/100 [01:19<00:00, 1.26it/s]
a=1
b=1
points = [[-a,0,0], [a/2, a*sqrt3by2(), 0], [a/2, -a*sqrt3by2(), 0],
# [0,0,b], [a*sqrt3by2(), -a/2, b], [0, a, b], [-a*sqrt3by2(), -a/2, b]
]
E = plot_band_structure(points)
Calculating...: 100%|████████████████████████████████████████████████████████████████| 100/100 [01:13<00:00, 1.36it/s]